package com.hu.juc.day01.T1;

/**
 *   1.高聚低合前提下，线程操作资源类
 *   2.判断/干活/通知
 *   3.多线程交互中，必须要防止多线程的虚假唤醒，也即(判断只用while，不能用if)
 *
 *题目:现在两个线程，可以操作初始值为零的一个变量,
 *     实现一个线程对该变量加1，一个线程对该变量减1，
 *     实现交替，来10轮，变量初始值为零。
 */
public class ThreadWaitNotifyDemo {
    public static void main(String[] args) {
        /*Test01 test01 = () -> System.out.println("lambda---");
        test01.test1();
        System.out.println(test01.add(2, 8));
        System.out.println(Test01.div(10, 2));*/
        Ticket ticket = new Ticket();

        new Thread(() -> {
            for (int i = 0; i < 9; i++) {
                try {
                    ticket.inc();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }, "A").start();

        new Thread(() -> {
            for (int i = 0; i < 9; i++) {
                try {
                    ticket.dec();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }, "B").start();


        new Thread(() -> {
            for (int i = 0; i < 9; i++) {
                try {
                    ticket.inc();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }, "C").start();

        new Thread(() -> {
            for (int i = 0; i < 9; i++) {
                try {
                    ticket.dec();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }, "D").start();

    }
}